<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>ОЗУ</title>
</head>

<body bgcolor="FFFFFF">

<h1><img align="center" src="../../../../icons/ram.gif" width="32" height="32">
<em>ОЗУ</em></h1>

<p><table>
<tr><td><strong>Библиотека:</strong></td>
	<td><a href="index.html">Память</a></td></tr>
<tr><td><strong>Введён в:</strong></td>
	<td>2.0 Beta 1</td></tr>
<tr><td valign="top"><strong>Внешний вид:</strong></td>
	<td valign="top"><img src="../../../../img-libs/ram.png" width="305" height="84"></td></tr>
</table></p>

<h2>Поведение</h2>

<p>Компонент ОЗУ, бесспорно самый сложный компонент встроенной библиотеки Logisim, хранит до 16777216 значений (это задаётся в атрибуте Разрядность адреса), каждое из которых может включать до 32 битов (задаётся в атрибуте Разрядность данных). Схема может считывать и записывать значения в ОЗУ. Кроме того, пользователь может интерактивно изменять отдельные значения с помощью Инструмента Нажатие, или менять всё содержимое через Инструмент Меню.</p>

<p>Текущие значения отображаются в компоненте. Их адреса перечислены серым слева от области отображения. Значения внутри представлены в шестнадцатеричном виде. Значение выбранного в данный момент адреса будет отображаться негативным текстом (белым по чёрному).</p>

<p>Компонент ОЗУ поддерживает три интерфейса, в зависимости от значения атрибута Интерфейс данных.</p>

<dl>

<dt>Один синхронный порт чтения/записи (по умолчанию)</dt>
<dd><p>Компонент имеет один порт на восточном крае, который служит для чтения и записи данных. Что он осуществляет, зависит от значения на входе, отмеченном <em>ld</em>: 1 (или плавающее значение) означает чтение данных по адресу, поданному на западный край компонента, а 0 означает запись данных, поступивших на порт. Для передачи данных в компонент и из него, вам нужно использовать компонент Управляемый буфер, как показано ниже.</p>

<center><img src="../../../../img-libs/ramdemo.png" width="384" height="159"></center></dd>

<dt>Один асинхронный порт чтения/записи</dt>
<dd><p>Это тоже самое, что и выше, но в данном варианте нет тактового входа. Значение, поступившее на шину данных, записывается в память, когда значение на входе <em>ld</em> - 0. Если адрес или данные меняются, пока значение на входе <em>ld</em> 0, то происходит дополнительная операция записи. Этот вариант более приближен к интерфейсу многих доступных типов памяти с произвольным доступом.</p></dd>

<dt>Раздельные порты чтения и записи</dt>
<dd><p>Предоставляются два порта данных - один на западном крае для записи данных, и другой на восточном крае для чтения данных. Этот вариант устраняет необходимость Управляемого буфера, так что он проще в использовании.</p></dd>

<h2>Контакты</h2>

<dl>

<dt><var>A</var> на западном крае (вход, разрядность соответствует атрибуту Разрядность адреса)</dt>
<dd>Выбирает, к какому значению в памяти схема в данный момент получает доступ.</dd>

<dt><var>D</var> на западном крае (вход, разрядность соответствует атрибуту Разрядность данных)</dt>
<dd>Этот вход представлен, только если "Раздельные порты чтения и записи" выбрано для атрибута Интерфейс данных. Когда запрошена запись (через изменение значения на тактовом входе с 0 на 1, пока на входах <em>sel</em> и <em>str</em> 1 или плавающее значение), значение, поданное на этот порт, записывается в память по выбранному в данный момент адресу.</dd>

<dt><var>D</var> на восточном крае (вход/выход или выход, разрядность соответствует атрибуту Разрядность данных)</dt>
<dd>Если на входах <var>sel</var> и <var>ld</var> 1 или плавающее значение, то компонент ОЗУ выдаёт на этот порт значение по выбранному в данный момент адресу. Если представлен один порт чтения/записи, то когда запрошена запись, значение, считанное по этому порту, записывается в память.</dd>

<dt><var>str</var> на южном крае (вход, разрядность равна 1)</dt>
<dd>Запись: этот вход представлен, только если "Раздельные порты чтения и записи" выбрано для атрибута Интерфейс данных. Когда на нём 1 или плавающее значение, тактовый импульс приведёт к записи в память данных, полученных на западном крае (при условии, что на входе <var>sel</var> тоже 1 или плавающее значение).</dd>

<dt><var>sel</var> на южном крае (вход, разрядность равна 1)
<dd>Выбор кристалла: этот вход включает или выключает весь модуль ОЗУ, в зависимости от того, 1/плавающее значение на нём, или 0. Это вход предназначен в первую очередь для ситуаций, когда у вас есть несколько модулей памяти, только один из которых может быть включен в какой-то момент.</dd>

<dt>треугольник на южном крае (вход, разрядность равна 1)
<dd>Тактовый вход: отсутствует, если значение атрибута Интерфейс данных - "Один асинхронный порт чтения/записи". В других случаях, когда на входе <var>ld</var> 0, и значение на нём меняется с 0 на 1 (и ещё на входе <var>sel</var> 1/неопределённость и на входе <var>clr</var> 0), значение по выбранному в данный момент адресу меняется на значение на контакте <var>D</var>. Но пока на тактовом входе сохраняется 0 или 1, значение входа <var>D</var> не будет записано в память.</dd>

<dt><var>ld</var> на южном крае (вход, разрядность равна 1)
<dd>Чтение: выбирает, должно ли ОЗУ выдавать (на выход <var>D</var>) значение по текущему адресу. Такое поведение выхода разрешено, если на входе <var>out</var> 1 или неопределённость; если же на входе <var>out</var> 0, тогда никакого значения не будет передано на <var>D</var>, а если порт - совмещённый для чтения/записи, то будет разрешена запись.</dd>

<dt><var>clr</var> на южном крае (вход, разрядность равна 1)</dt>
<dd>Очистка: когда на этом входе 1, все значения в памяти будут фиксированы на 0, вне зависимости от значений на других входах.</dd>

</dl>

<h2>Атрибуты</h2>

<p>Когда компонент выбран, или уже добавлен, клавиши от 0 до 9 меняют его атрибут <q>Разрядность адреса</q>, а комбинации от Alt-0 до Alt-9 меняют его атрибут <q>Разрядность данных</q>.</p>

<dl>

<dt>Разрядность адреса</dt>
<dd>Число адресных битов. Количество значений, хранящихся в ОЗУ равно 2<sup><var>Разрядность_адреса</var></sup>.</dd>

<dt>Разрядность данных</dt>
<dd>Разрядность каждого отдельного значения в памяти.</dd>

<dt>Интерфейс данных</dt>
<dd>Определяет, какой из трёх интерфейсов использовать для передачи данных в и из компонента.</dd>

</dl>

<h2>Поведение Инструмента Нажатие</h2>

<p>См. <a href="../../guide/mem/mem-poke.html">Нажатие на память</a> в <em>Руководстве пользователя</em>.</p>

<h2>Поведение Инструмента Текст</h2>

<p>Нет.</p>

<h2>Поведение Инструмента Меню</h2>

<p>См. <a href="../../guide/mem/mem-menu.html">Всплывающие меню и файлы</a> в <em>Руководстве пользователя</em>.</p>

<p><a href="../index.html">Назад к <em>Справке по библиотеке</em></a></p>

</body>
</html>
